package com.dimeina.util;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 对数据库基本操作的封装
 * 第一次封装！！！
 * @author Michael
 */
public class BaseDAO extends DatabaseUtil {
	/**
	 * 专门执行插入、更新、删除SQL语句，返回受影响的行数，如果返回1表示成功，如果返回0表示失败
	 * @param 增、删、改语句 和 占位符
	 * @author Michael
	 */
	                    // 一个方法里只能有一个“可变参数”！！！
	
	public int executeUpdate(String sql,Object...values){
		// 声明返回的参数
		int result = 0;
		
		try {
			// 获取连接
			conn = getConnection();
			// 通过Connection类实例预编译String语句
			pstmt = conn.prepareStatement(sql);
			// 填充占位符
			if (values != null && values.length > 0) {
				for (int i = 0; i < values.length; i++) {
					pstmt.setObject((i+1), values[i]);
				}
			}
			// 执行语句
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("executeUpdate语句异常！");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("executeUpdate语句未知异常");
		} finally{
			closeAll(rs, pstmt, conn);
		}
		
		return result;
	}
	
	/**
	 * 专门执行查询SQL语句，注意不能执行插入、更新、删除SQL语句。
	 * @param 查询语句 和 占位符
	 * @author Michael
	 */
	public ResultSet executeQuery(String sql,Object...values){
		// 获取连接
		conn = getConnection();
		try {
			// 通过Connection类实例预编译String语句
			pstmt = conn.prepareStatement(sql);
			// 填充占位符
			if (values != null && values.length > 0) {
				for (int i = 0; i < values.length; i++) {
					pstmt.setObject((i+1), values[i]);
				}
			}
			// 执行语句
			rs = pstmt.executeQuery();
			
		} catch (SQLException e) {
			System.out.println("executeQuery语句异常！");
		} catch (Exception e) {
			System.out.println("未知异常！");
			e.printStackTrace();
		}
		return rs;
	}
	
}
